package com.xuxueli.commontdemo.commont.testSocket;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server extends Thread {

    static  Socket socket;
    public Server(Socket socket){
        this.socket=socket;
    }


    public void run(){

        while(true){
            try {
                //*************文件处理用
                DataInputStream filein=new DataInputStream(socket.getInputStream());
                DataOutputStream fileout=new DataOutputStream(socket.getOutputStream());

                //消息处理
                BufferedReader in = new BufferedReader(new InputStreamReader(socket
                        .getInputStream()));
                PrintWriter out = new PrintWriter(socket.getOutputStream());


                while(true){

                    //读取客户端传过来的信息

                    String str = in.readLine();

                    if("m".equals(str.substring(0, 1))){
                        out.println("服务器收到的消息：" + str.substring(2,str.length()));

                        //写入文件(创建一个txt文件)
                        FileOutputStream   fos=new   FileOutputStream("d:/FileName.txt");

                        String temp="你输入的消息为："+str.replace("m ","");//去掉m
                        fos.write(temp.getBytes());
                        fos.close();
                        //进行流刷新
                        out.flush();


                    }
                    if(!str.equals("dir")||str.equals("")){
                        out.println("输入的命令无效!!!");
                        //进行流刷新
                        out.flush();
                    }



                    if(str.equals("dir")){
                        //返回给客户端的信息
                        fileout.writeUTF("canLoad");
                    }

                    //从ServerFiles里找出所有文件
                    File dir=new File("d:/ServerFiles");
                    File[] files=dir.listFiles();
                    fileout.writeInt(files.length);
                    for(int i=0;i<files.length ;i++){
                        //把文件返回给客户
                        fileout.writeUTF(files[i].getName());
                    }

                    //读取客户传过来的文件名
                    String fileName=filein.readUTF();

                    //由客户传过来的文件名，在ServerFiles里查找相应的文件名
                    File file=new File("d:/ServerFiles/"+fileName);//别忘了创建文件夹（ServerFiles）

                    //目录下的文件存在
                    if(file.exists()){
                        //返回给客户端的信息
                        fileout.writeUTF("startDownLoad");//可下载
                        fileout.writeLong(file.length());
                        BufferedInputStream fileIn=new BufferedInputStream(new FileInputStream(file));
                        int b=-1;
                        while((b=fileIn.read())!=-1){
                            fileout.write(b);//输出文件到客户端
                        }

                    }else{
                        fileout.writeUTF("Error");
                    }



                    if (str.equals("exit"))
                        break;


                }
//				//关闭
//				 socket.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }






    /**
     * @param args
     * @throws IOException
     */
//	public static void main(String[] args) throws IOException {
//		Server sr=new Server();
//
//		 ServerSocket ss=new ServerSocket(9966);
//		 System.out.println("服务器成功启动......");
//		//等待客户端请求
//		 while(true){
//			 socket=ss.accept();
//				sr.start();
//		 }
//			
//	}

}
